<?php

namespace App\Http\Controllers;

use App\Http\Requests\LoginRequest;
use App\Mail\RegisterMail;
use App\User;
use Illuminate\Http\Request;
use Validator;
use Mail;
class LoginController extends Controller
{
    public function index(){
//        加载注册模板
        return view("login");
    }

    public function longin(Request $request,LoginRequest $loginRequest){
//        $request是Request类实例化出的对象
//        用$post获取$request的数据
//        创建控制器要拿命令行创建
//        一步一步来：
//        现在可以成功打印到post的数据，下一步，进行判断
//        all()方法是laravel自带的方法，它可以打印所有的请求
//        dd()方法是自带的打印函数，相当于p
//        $post=$request->all();
//        dd($post);
//        echo 111;


//        下一步：进行判断
//        手动进行验证：使用validator方法
//        make方法：第一个参数为你要验证谁，第二个参数为你要验证的规则
//        a=>b,a是你要验证谁，b为你的值，required表示不为空




//        $validator = Validator::make($request->all(),[
//            "name" => "required",
//            "email" => "required|email",
//            "password" => "required|between:6,20|confirmed",
//            "password_confirmation" => "required|between:6,20",
//        ]);



//        dd打印出来的是你要验证的数据及验证的规则，它是一个对象
//        dd($validator);
//        但是咱们要验证不能拿$validator,得拿fails
//        $res= $validator->fails();
//        dd($res);
//        $res返回的是布尔值，如果为真代表验证失败，为假代表验证成功
//        如果验证成功的话就把它写到数据库
//        如果不成功的话就返回首页

//        判断如果验证失败就返回当前页，返回当前页页的方法：redirect（）方法
//        if ($validator->fails()){



//            第一种方法：验证不成功返回当前页，并且弹出出现错误信息
//            错误信息方法：witherrors（）方法
//            return redirect("/index");
//            return redirect("/index")->withErrors($validator);
//        }




//        到目前：验证已经完成了，下一步就是显示错误信息
//        显示错误信息在模板中显示
//        @if ($errors->any())
//    <div class="alert alert-danger">
//        <ul>
//        @foreach ($errors->all() as $error)
//                <li>{{ $error }}</li>
//        @endforeach
//        </ul>
//    </div>
//        @endif



//        0704:邮件注册：给你的扣扣邮箱发邮件
//        第一步：加字段,造数据完毕
//        第二步:配置邮箱,在config/mail.php中读取配置文件,而mail.php在是根据env的文件进行配置的
//        第三步:配置完毕,发邮件








//            存数据,存数据:密码不能明文存吧,把密码加密存进去
        $post  = $request->all();
        $post["password"] = bcrypt($post["password"]);

//        这句话不懂啊
        $post["email_token"] = str_random(10);
//        create()方法往数据表里边填充数据
//        特别重要!!!!!!!!!!
//        create方法有返回值,它返回的是你要添加的数据
        $user = User::create($post);
//        dd($user["email_token"]);die();


//        想想:在哪个位置发邮件,好了,到目前为止,我们成功发送了邮件
//        下一步:激活邮箱,想一想怎么激活.
//        是不是把他的status状态码变为1就行了,但是我怎么知道你要激活哪个呢,是不是得传参呀
//        那个email_token不就是个参数吗,就把email_token传过去


//        不懂为什么往地址栏传参数,不穿参数行不行

        Mail::to($user)->send(new RegisterMail($user["email_token"]));
//        好了,到此我们成功把参数传过去了
//        下一步:邮件发过去后点击链接激活邮箱,是不是含得建方法,配路由


//        上面的是显示错误信息，那我要是注册成功了呢
//        laravel中并没有弹窗，所以得调用它有的方法
//        利用session闪存机制，session->flash方法,session->flash是存数据

//        session->has()检测session某个值是否存在
//        因为你这个闪存不一定要在这用，有时候其他地方也需要用，所以我们把他封装成一个公共模板
//        在需要的地方调用就行
        session()->flash("success","恭喜你，注册成功");
        return redirect("/");
//        以上为手动验证，下面介绍第二种方法，自动创建类验证,在创建的Requests里面的LoginRequest类中



//        自动创建类验证完成，下一步，语言包，转为中文
//        转为中文结束,下一步,存数据,存数据在弹出注册成功之前

//        到此为止:注册功能结束,下一步,登录功能
    }

    public function jihuo($token){

//          成功把参数传过去了
//        点击激活,把status变为1
//        dd($token);
//        接下来是不是得操作数据表了,所以要涉及到数据表的操作方法
//        所以我们使用where方法来进行验证

//        数据库查询条件语句
        $user = User::where("email_token",$token)->first();
//        判断这条数据是否存在,如果存在就执行以下操作
        if ($user){
            $user->status = 1;
            $user->save();

//            账号激活后自动绑用户登录
            \Auth::login($user);


            session()->flash("success","账号激活成功,热烈欢迎");
            return redirect("/");


        }else{
            session()->flash("danger","不好意思,未激活账号");
            return redirect("/");
        }


//        echo 111;
    }


}